package com.yanyuan.algorithm.exhaustion;

import java.math.BigDecimal;

/**
 * 搬砖问题：男人搬4块砖头，女人搬3块砖头，三个小孩搬一块砖
 * 共100个人，搬100块砖各自需要多少人
 * @author: yanyuan
 * @Date: 2020/7/6 17:15
 * @Description:
 */
public class Ban {

    public static void main(String[] args) {
        planA();

        //点兵优化
        planB();
    }



    static void planA(){
        int count = 0;
        long times = System.currentTimeMillis();
        //1.确定循环变量100， 定义男人为X,女人为y, 小孩为z
        for(int x = 0; x <= 100; x++){
            for(int y = 0; y <= 100 - x; y++){
                for(int z = 0; z <= 100 - x - y; z += 3){
                    int personNum = x + y + z;
                    int categoryNum = x * 4 + y * 3 + z / 3;
                    if(personNum == 100 && categoryNum == 100){
                        System.out.println("男人: " + x + "，女人：" + y + "，儿童：" + z);
                    }
                    count++;
                }
            }
        }
        System.out.println("循环次数，count： " + count);
        times =  System.currentTimeMillis() - times;
        System.out.println("耗时，times： " + times + "ms");

    }

    /**
     * 点兵优化
     */
    private static void planB() {
        int count = 0;
        long times = System.currentTimeMillis();
        //1.确定循环变量100， 定义男人为X,女人为y, 小孩为z
        for(int x = 0; x <= 100 / 4 ; x++){
            for(int y = 0; y <= (100 - x) / 3; y++){
                int z = 100 - y - x;
                if(z % 3 == 0 && x * 4 + y * 3 + z / 3 == 100){
                    System.out.println("男人: " + x + "，女人：" + y + "，儿童：" + z);
                }
                count++;
            }
        }
        System.out.println("循环次数，count： " + count);
        times =  System.currentTimeMillis() - times;
        System.out.println("耗时，times： " + times + "ms");
    }
}
